The creation of software often relies on the use of a number of other pre-existing software components such as libraries, tools frameworks, and others. An increasing plethora of options, both open source and commercial, across various technologies and domains, exist to enable developers to leverage a wide range of capabilities within their software. The choice of which software sub-component such frameworks, libraries, tools and others, to use in a software project impacts the productivity of the team, and the overall success of a project. Such choices are thus made carefully taking into account the team's skills, experience levels and project goals in addition to the various properties of the software components. However, this task is often very complex, time consuming and rarely if ever optimal in its outcome. This is may be due to the multitude of software components to compare and choose from, the difficulty of accurately estimating a team's adoption curve towards software components, and the difficulty in assessing, quantifying and factoring into the decision process, information about a team's skills and project constraints. The disparate and unstructured sources of information from which such data are sourced compound the difficulty.